package pe.gob.foncodes.ssa.web.controller;

import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.List;
import java.util.ArrayList;
import java.util.Collection;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import org.apache.log4j.Logger;

import pe.gob.foncodes.ssa.bs.common.controller.GenericController;
import pe.gob.foncodes.ssa.bs.common.util.Constante;
import pe.gob.foncodes.ssa.bs.common.util.ServiceException;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Modulo;
import pe.gob.foncodes.ssa.bs.seguridad.domain.Perfil;
import pe.gob.foncodes.ssa.web.beans.UsuarioSinAccesoBean;
import pe.gob.foncodes.ssa.web.util.Impresion;

public class ReporteUsuarioSinAccesoController extends GenericController {
    protected static Logger log = Logger.getLogger(ReporteUsuarioSinAccesoController.class);
    
    private List<UsuarioSinAccesoBean> lstUsuarioSinAcceso = new ArrayList<UsuarioSinAccesoBean>();
    private List<Perfil> lstPerfiles;
    private List<Modulo> lstModulos;
                
    private String txtBusCodUsuario;
    private String txtBusNomUsuario;
    private java.util.Date txtBusFecInicio;
    private Long txtBusIdModulo;
    private Long txtBusIdPerfil;
    
    @Override
    public void init() {
        lstUsuarioSinAcceso = new ArrayList<UsuarioSinAccesoBean>();
    }

    @Override
    public void search(ActionEvent event) throws Exception{
        log.info("Ejecutando filtro reporte");
        log.info(String.format("%s%s","txtBusCodUsuario:", txtBusCodUsuario));
        log.info(String.format("%s%s","txtBusNomUsuario:", txtBusNomUsuario));
        log.info(String.format("%s%s","txtBusFecInicio:", txtBusFecInicio));
        log.info(String.format("%s%s","txtBusIdModulo:", txtBusIdModulo));
        log.info(String.format("%s%s","txtBusIdPerfil:", txtBusIdPerfil));
        
        this.txtBusCodUsuario=(this.txtBusCodUsuario == null)?null:this.txtBusCodUsuario.trim().toUpperCase();
        this.txtBusNomUsuario=(this.txtBusNomUsuario == null)?null:this.txtBusNomUsuario.trim().toUpperCase();
        
        Date fecInicio = (this.txtBusFecInicio == null) ? null : new Date(this.txtBusFecInicio.getTime());
        String strBusNomUsuario = (this.txtBusNomUsuario == null) ? null : this.txtBusNomUsuario.trim().toUpperCase()+ "%";
                
        List<Object[]> olstSinAcceso = getService().findByNamedQuery("ControlAcceso.findByReporteSinAcceso"
                                                                    , new Object[]{this.txtBusCodUsuario
                                                                                    , strBusNomUsuario
                                                                                    , txtBusIdPerfil
                                                                                    , fecInicio
                                                                                    , txtBusIdModulo});
        
        this.lstUsuarioSinAcceso = new ArrayList<UsuarioSinAccesoBean>();
        for(Object[] obj: olstSinAcceso){
            UsuarioSinAccesoBean oSinAcceso = new UsuarioSinAccesoBean();
            
            oSinAcceso.setCOD_USUARIO((String)obj[0]);
            oSinAcceso.setNOMBRES((String)obj[1]);
            oSinAcceso.setTXT_MODULO((String)obj[2]);
            oSinAcceso.setTXT_PERFIL((String)obj[3]);
            oSinAcceso.setFEC_REGISTRO((obj[4] == null)?null:(new SimpleDateFormat("dd/MM/yyyy")).format(obj[4]));
            oSinAcceso.setUNIDAD_TERRITORIAL("Unidad Territorial");
            this.lstUsuarioSinAcceso.add(oSinAcceso);
        }        
    }
    
    public void limpiar() {
        this.txtBusCodUsuario = null;
        this.txtBusNomUsuario = null;
        this.txtBusFecInicio = null;
        this.txtBusIdModulo = new Long(-1);
        this.txtBusIdPerfil = new Long(0);
        this.lstUsuarioSinAcceso = new ArrayList<UsuarioSinAccesoBean>();
        setBeanList(lstUsuarioSinAcceso);
    }
    
    public void print(){
     try {
            Collection col = new ArrayList();
            for(UsuarioSinAccesoBean oUsuarioSinAcceso: this.lstUsuarioSinAcceso){
                col.add(oUsuarioSinAcceso);
            }                    
            Impresion imprimir = new Impresion();
            imprimir.imprimirListado("ssa_rpt_usuarios_sin_acceso", col);
        } catch (Exception ex) {
            log.error(ex);
        } finally {
            FacesContext.getCurrentInstance().responseComplete();
        }
    }
    
    
    @Override
    public boolean validate() throws Exception{
        boolean success = true;
        
        return success;
    }

    public List<UsuarioSinAccesoBean> getLstUsuarioSinAcceso() {
        return lstUsuarioSinAcceso;
    }

    public void setLstUsuarioSinAcceso(List<UsuarioSinAccesoBean> lstUsuarioSinAcceso) {
        this.lstUsuarioSinAcceso = lstUsuarioSinAcceso;
    }
        
    public String getTxtBusCodUsuario() {
        return txtBusCodUsuario;
    }

    public void setTxtBusCodUsuario(String txtBusCodUsuario) {
        this.txtBusCodUsuario = txtBusCodUsuario;
    }

    public java.util.Date getTxtBusFecInicio() {
        return txtBusFecInicio;
    }

    public void setTxtBusFecInicio(java.util.Date txtBusFecInicio) {
        this.txtBusFecInicio = txtBusFecInicio;
    }

    public Long getTxtBusIdModulo() {
        return txtBusIdModulo;
    }

    public void setTxtBusIdModulo(Long txtBusIdModulo) {
        this.txtBusIdModulo = txtBusIdModulo;
    }

    public Long getTxtBusIdPerfil() {
        return txtBusIdPerfil;
    }

    public void setTxtBusIdPerfil(Long txtBusIdPerfil) {
        this.txtBusIdPerfil = txtBusIdPerfil;
    }

    public String getTxtBusNomUsuario() {
        return txtBusNomUsuario;
    }

    public void setTxtBusNomUsuario(String txtBusNomUsuario) {
        this.txtBusNomUsuario = txtBusNomUsuario;
    }

    public List<Modulo> getLstModulos() throws ServiceException {
        this.lstModulos = getService().findByNamedQuery("Modulo.findByFlgActivo"
                                                            , new Object[]{Constante.ESTADO_ACTIVO});                
        return this.lstModulos;
    }

    public void setLstModulos(List<Modulo> lstModulos) {
        this.lstModulos = lstModulos;
    }

    public List<Perfil> getLstPerfiles() throws ServiceException {
        this.lstPerfiles = getService().findByNamedQuery("Perfil.findByFlgActivo"
                                                            , new Object[]{"1"});
        return this.lstPerfiles;
    }

    public void setLstPerfiles(List<Perfil> lstPerfiles) {
        this.lstPerfiles = lstPerfiles;
    }    
    
}